package com.tbit.main.service;

import com.tbit.main.h2.pojo.ParkPoint;
import com.tbit.main.pojo.*;

import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * @author LMY
 * @create 2021-04-12 15:21
 */
public interface DataService {

    /**
     * 缓存数据定时任务
     */
    void reloadData();

    /**
     * 车辆实时状态定时任务
     */
    void reloadMachineStateData();

    /**
     * 电量定时任务
     */
    void batteryData();

    /**
     * 设备编号：设备id
     */
    Integer getMachineId(String machineNo);


    Integer getMachineIdLister(String machineNo);

    /**
     * 设备编号：设备id
     */
    Integer getMachineIdUserCode(String userCode);

    /**
     * 车辆编号：设备编号
     */
    String getMachineNO(String userCode);

    Integer getId(String machineNo);

    /**
     * 设备编号：区域id
     */
    Integer getAccountId(String machineNO);

    /**
     * 车辆id：设备信息
     */
    Machine getMachine(Integer machineId);

    /**
     * 运营区域id：区域配置
     */
    AccountConfig getAccountConfig(Integer accountId);

    /**
     * 区域id：工单配置
     */
    WorkOrderConfig getWorkOrderConfig(Integer accountId);

    /**
     * 设备编号批量：设备id
     */
    List<Integer> getByMachineIds(List<String> machineNos);

    /**
     * 区域id：人员工单配置
     */
    List<AccountUserWorkConfig> getAccountUserWorkConfigByAccountId(Integer accountId);

    /**
     * 运维人员 Id：人员工单打卡
     */
    AccountUserWork getAccountUserWorkByAccountUserId(Integer accountUserId);

    /**
     * 区域id：geo
     */
    List<Point> getGeo(Integer accountId);

    /**
     * 分区id：geo
     */
    List<Point> getGeore(Integer regionId);

    /**
     * 区域id：分区id
     */
    List<Integer> getAccountIdGeore(Integer accountId);

    /**
     * 区域id:计费规则
     */
    AddCountFee getAddFee(Integer accountId);

    /**
     * 运营区域id_类型:短信配置
     */
    AccountSmsModel getAccountSmsModel(String accountType);

    /**
     * 区域id:品牌id
     */
    Integer getParentId(Integer accountId);

    /**
     * 设备id：设备状态
     */
    MachineStatus getMachineStatus(Integer machineId);

    /**
     * 所有区域配置
     */
    List<AccountConfig> getAllAccountConfig();

    /**
     * 车辆id批量:车辆信息
     */
    List<Machine> getMachines(List<Integer> machineIds);

    /**
     * 根据设备id:获取设备编号
     */
    String getMachineNo(Integer machineId);

    /**
     * 人员id:最后位置
     */
    AccountUserLastPos getByAccountUserLastPos(Integer accountUserId);

    /**
     * 人员ids:最后位置
     */
    Map<Integer, AccountUserLastPos> getByUserId(Collection<Integer> accountUserIds);

    /**
     * 车辆id：分区id
     */
    Integer getByGeoMachineId(Integer machineId);

    /**
     * 分区id：人员id
     */
    List<Integer> getByRegionId(Integer regionId);

    /**
     * 根据人员id查询
     */
    AccountUserConfig getByAccountUserId(Integer userId);

    /**
     * 人员id：人员
     */
    AccountUser getAccountUser(Integer accountUserId);

    /**
     * 根据区域和参数名获取配置
     */
    AccountConfigExt getAccountidExt(String accountExt);

    /**
     * 判断站点是否存在rfid
     */
    boolean getParkPointBound(Integer parkPointId);

    /**
     * 判断车辆是否有功能
     */
    boolean getMachineType(Integer machineId);

    /**
     * 查询区域调度配置
     */
    DispatchConfig getDispatch(Integer accoountId);

    /**
     * 根据电池no获取电池id
     */
    Integer getBatteryId(String batteryNO);

    /**
     * 根据电池no获取区域id
     */
    Integer getBatteryAccountId(String batteryNO);

    /**
     * 根据电池型号id查询型号
     */
    BatteryModelChart getByIdBatteryModelChart(Integer batteryModelChartId);

    /**
     * 云bms批次：批次
     *
     * @param bmsBatch
     * @return
     */
    BmsBatch getBmsBatch(Integer bmsBatch);

    /**
     * 电池no：电池型号id
     *
     * @param batteryNO
     * @return
     */
    Integer getModelId(String batteryNO);

    /**
     * 角色id+开关名称：配置
     *
     * @param rokeIdKey
     * @return
     */
    Integer getRoleConfig(String rokeIdKey);

    /**
     * 获取站点围栏
     *
     * @param parkPointId
     * @return
     */
    List<Point> getParkList(Integer parkPointId);

    /**
     * 获取站点
     *
     * @param parkPointId
     * @return
     */
    ParkPoint getParkPoint(Integer parkPointId);

    Map<String, Object> getoperationalDataToMainMapTemp(Integer brandId);

    void operationalDataToMain();

    Integer getMannedId(Integer machineId);

    /**
     * 根据电池no获取电池id （只查询缓存不查询数据库）
     * @param batteryNO 电池编号
     * @return 电池id
     */
    Integer getBatteryIdNoDb(String batteryNO);
}
